package com.carrental.rental.dto;

import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Min;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 订单数据传输对象
 */
@Data
public class OrderDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    private Long id;

    /**
     * 订单编号
     */
    private String orderNo;

    /**
     * 用户ID
     */
    @NotNull(message = "用户ID不能为空")
    private Long userId;

    /**
     * 车辆ID
     */
    @NotNull(message = "车辆ID不能为空")
    private Long vehicleId;

    /**
     * 取车门店ID
     */
    @NotNull(message = "取车门店ID不能为空")
    private Long pickupStoreId;

    /**
     * 还车门店ID
     */
    @NotNull(message = "还车门店ID不能为空")
    private Long returnStoreId;

    /**
     * 开始时间
     */
    @NotNull(message = "租车开始时间不能为空")
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    @NotNull(message = "租车结束时间不能为空")
    private LocalDateTime endTime;

    /**
     * 租赁天数
     */
    @NotNull(message = "租赁天数不能为空")
    @Min(value = 1, message = "租赁天数最少为1天")
    private Integer days;

    /**
     * 租金金额
     */
    @NotNull(message = "租金金额不能为空")
    @Min(value = 0, message = "租金金额不能小于0")
    private BigDecimal rentAmount;

    /**
     * 押金金额
     */
    @NotNull(message = "押金金额不能为空")
    @Min(value = 0, message = "押金金额不能小于0")
    private BigDecimal depositAmount;

    /**
     * 优惠金额
     */
    private BigDecimal discountAmount;

    /**
     * 实付金额
     */
    @NotNull(message = "实付金额不能为空")
    @Min(value = 0, message = "实付金额不能小于0")
    private BigDecimal payAmount;

    /**
     * 订单状态（1-待支付，2-已支付待取车，3-已取车，4-已还车，5-已完成，6-已取消）
     */
    private Integer status;

    /**
     * 支付时间
     */
    private LocalDateTime payTime;

    /**
     * 取车时间
     */
    private LocalDateTime pickupTime;

    /**
     * 还车时间
     */
    private LocalDateTime returnTime;

    /**
     * 备注
     */
    private String remark;
} 